package num32I;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;

/**
 * @author : DuJiabao
 * @Date : 2021/1/22 15:58
 * @Project : sword-finger-offer
 * @File : null.java
 * @Desc : 从上到下打印出二叉树的每个节点，同一层的节点按照从左到右的顺序打印。
 */
public class Solution {
    /**
     * 这个方法很巧妙，通过Queue先保存顺序。然后一边取值的过程，一边添加下一层的元素。直到没东西可以取。
     * @param root
     * @return
     */
    public int[] levelOrder(TreeNode root) {
        if(root==null) return new int[0];  // 应该是防止报错，不能不返回东西，但又没东西返回。
        Queue<TreeNode> queue = new LinkedList<>();
        ArrayList<Integer> res = new ArrayList<>();
        queue.add(root);
        while (!queue.isEmpty()) {
            TreeNode temp = queue.poll();
            res.add(temp.val);
            if (temp.left != null) queue.add(temp.left);
            if (temp.right != null) queue.add(temp.right);
        }
        int[] result = new int[res.size()];
        for (int i = 0; i < res.size(); i++) {
            result[i] = res.get(i);
        }
        return result;
    }
}
